/**
 * 家庭管理服务
 * 负责家庭成员相关的API调用和数据管理
 * 
 * 功能说明：
 * - 支持真实API和模拟数据双轨运行
 * - 提供家庭成员的增删改查功能
 * - 处理家庭成员信息的完整生命周期
 * 
 * @author 项目开发团队
 * @version 1.0.0
 */

import axios from 'axios'

// 获取API前缀，支持环境变量配置
const API_PREFIX = import.meta?.env?.VITE_API_PREFIX || ''

/**
 * 模拟数据存储
 * 在开发阶段或没有后端API时使用
 * 包含完整的家庭成员信息结构
 */
let familyMembers = [
  { 
    id: 'm1', 
    name: '王*柯', 
    relation: '本人', 
    regNo: '2015****10',
    gender: '女',
    age: 20,
    idType: '居民身份证',
    idNumber: '5023************71',
    phone: '13666666666',
    address: '四川省-成都市-锦江区'
  },
  { 
    id: 'm2', 
    name: '李*玲', 
    relation: '朋友', 
    regNo: '2015****11',
    gender: '女',
    age: 25,
    idType: '居民身份证',
    idNumber: '5023************72',
    phone: '13666666667',
    address: '四川省-成都市-武侯区'
  }
]

/**
 * 获取家庭成员列表
 * 返回用于列表展示的简化信息
 * 
 * @returns {Promise<Array>} 家庭成员列表
 * @returns {string} id - 成员ID
 * @returns {string} name - 成员姓名
 * @returns {string} relation - 与患者关系
 * @returns {string} regNo - 登记号
 */
export async function fetchFamilyList() {
  // 如果有API前缀，调用真实接口
  if (API_PREFIX) {
    const res = await axios.get(`${API_PREFIX}/family`)
    return res.data
  }
  
  // 返回模拟数据，只包含列表展示需要的字段
  return familyMembers.map(member => ({
    id: member.id,
    name: member.name,
    relation: member.relation,
    regNo: member.regNo
  }))
}

/**
 * 添加新的家庭成员
 * 支持真实API和模拟数据两种模式
 * 
 * @param {Object} memberData - 成员信息
 * @param {string} memberData.relation - 就诊人关系
 * @param {string} memberData.name - 患者姓名
 * @param {string} memberData.gender - 性别
 * @param {number} memberData.age - 年龄
 * @param {string} memberData.idType - 证件类型
 * @param {string} memberData.idNumber - 证件号
 * @param {string} memberData.phone - 联系电话
 * @param {string} memberData.address - 现住址
 * @returns {Promise<Object>} 新添加的成员信息
 */
export async function addFamilyMember(memberData) {
  // 如果有API前缀，调用真实接口
  if (API_PREFIX) {
    const res = await axios.post(`${API_PREFIX}/family`, memberData)
    return res.data
  }
  
  // 模拟添加成员到本地存储
  const newMember = {
    id: `m${Date.now()}`,  // 使用时间戳生成唯一ID
    ...memberData,
    regNo: `2015****${String(Math.floor(Math.random() * 100)).padStart(2, '0')}` // 生成随机登记号
  }
  
  familyMembers.push(newMember)
  return newMember
}

/**
 * 获取家庭成员详细信息
 * 用于详情页面展示完整信息
 * 
 * @param {string} id - 成员ID
 * @returns {Promise<Object>} 成员详细信息
 * @throws {Error} 当成员不存在时抛出错误
 */
export async function getFamilyMemberDetail(id) {
  // 如果有API前缀，调用真实接口
  if (API_PREFIX) {
    const res = await axios.get(`${API_PREFIX}/family/${id}`)
    return res.data
  }
  
  // 从模拟数据中查找成员
  const member = familyMembers.find(m => m.id === id)
  if (!member) {
    throw new Error('Member not found')
  }
  return member
}

/**
 * 默认导出所有服务方法
 * 便于统一管理和使用
 */
export default { 
  fetchFamilyList, 
  addFamilyMember, 
  getFamilyMemberDetail 
}


